// st7735_hal.c
#include "definitions.h"
#include "../inc/st7735_spi_dma.h"

void ST7735_HAL_Init(void)
{
    // 初始化 DC、RES、CS 引脚
    LCD_DC_OutputEnable();
    LCD_DC_OutputEnable();
    LCD_CS_OutputEnable();

    LCD_DC_Set();
    LCD_RES_Set();
    // LCD_CS_Set();
    LCD_CS_Clear();

    // 初始化 PWM 背光
    TC2_CompareStart();
    TC2_Compare16bitMatch0Set(0xEFFF); // 默认亮度最大

    ST7735_SPI_DMA_Init();
}

void ST7735_HAL_WriteCommand(uint8_t cmd)
{
    LCD_DC_Clear(); // 命令模式
    // LCD_CS_Clear(); // 使能 CS
    SERCOM1_SPI_Write(&cmd, 1);
    // LCD_CS_Set(); // 禁用 CS
}

void ST7735_HAL_WriteData(uint8_t data)
{
    LCD_DC_Set(); // 数据模式
    // LCD_CS_Clear(); // 使能 CS
    SERCOM1_SPI_Write(&data, 1);
    // LCD_CS_Set(); // 禁用 CS
}

void ST7735_HAL_WriteDataDMA(void *buffer, size_t size)
{
    LCD_DC_Set(); // 数据模式
    // LCD_CS_Clear(); // 使能 CS
    SERCOM1_SPI_Write(buffer, size);
    // LCD_CS_Set(); // 禁用 CS
}

void ST7735_HAL_SetBacklight(uint8_t percent)
{
    percent       = (percent > 100) ? 100 : percent;
    uint16_t duty = (uint16_t)(((uint32_t)percent * 0xFFFFU) / 100);
    TC2_Compare16bitMatch0Set(duty);
}